//工厂模式
package www13;

// 定义一个接口Shape，用于创建不同形状的公共接口
interface Shape {
    // 定义一个draw方法，所有实现Shape接口的类都必须实现这个方法
    void draw();
}

// Circle类实现了Shape接口
class Circle implements Shape {
    // 实现draw方法，打印出圆形的信息
    @Override
    public void draw() {
        System.out.println("Inside Circle::draw() method.");
    }
}

// Square类实现了Shape接口
class Square implements Shape {
    // 实现draw方法，打印出正方形的信息
    @Override
    public void draw() {
        System.out.println("Inside Square::draw() method.");
    }
}

// Rectangle类实现了Shape接口
class Rectangle implements Shape {
    // 实现draw方法，打印出矩形的信息
    @Override
    public void draw() {
        System.out.println("Inside Rectangle::draw() method.");
    }
}

// ShapeFactory类用于创建Shape对象
class ShapeFactory {
    // getShape方法根据传入的形状类型字符串返回相应的形状对象
    public Shape getShape(String shapeType) {
        // 如果传入的形状类型为null，则返回null
        if (shapeType == null) {
            return null;
        }
        // 使用switch语句根据形状类型字符串返回相应的形状对象
        switch (shapeType.toLowerCase()) {
            case "circle":
                return new Circle(); // 返回Circle对象
            case "square":
                return new Square(); // 返回Square对象
            case "rectangle":
                return new Rectangle(); // 返回Rectangle对象
            default:
                return null; // 如果形状类型不匹配，则返回null
        }
    }
}

// Main类是程序的入口点
public class Main {
    // main方法是程序的起始点
    public static void main(String[] args) {
        // 创建ShapeFactory对象
        ShapeFactory shapeFactory = new ShapeFactory();

        // 请求创建一个圆形对象，并调用其draw方法
        Shape shape1 = shapeFactory.getShape("circle");
        if (shape1 != null) {
            shape1.draw(); // 如果对象不为null，则调用draw方法
        } else {
            // 如果对象为null，则打印出错误信息
            System.out.println("Unknown shape type requested: circle");
        }

        // 请求创建一个正方形对象，并调用其draw方法
        Shape shape2 = shapeFactory.getShape("square");
        if (shape2 != null) {
            shape2.draw(); // 如果对象不为null，则调用draw方法
        } else {
            // 如果对象为null，则打印出错误信息
            System.out.println("Unknown shape type requested: square");
        }

        // 请求创建一个矩形对象，并调用其draw方法
        Shape shape3 = shapeFactory.getShape("rectangle");
        if (shape3 != null) {
            shape3.draw(); // 如果对象不为null，则调用draw方法
        } else {
            // 如果对象为null，则打印出错误信息
            System.out.println("Unknown shape type requested: rectangle");
        }
    }
}